Gogs+Drone持续集成(CI/CD)入坑详细指南

您所在的位置:网站首页 delivery drones是什么 Gogs+Drone持续集成(CI/CD)入坑详细指南

Gogs+Drone持续集成(CI/CD)入坑详细指南

2024-02-23 01:00| 来源: 网络整理| 查看: 265

背景

近期在公司内部部署CI/CD平台, 经过比较Jenkins和Drone, 基于Drone的优点最终选择了Drone.

一开始也尝试使用docker部署Jenkins, 部署过程中下载插件失败(估计是伟大的墙的原因), 最后直接放弃并尝试部署Drone.

没想到搜遍全网, 相关资料甚少, 能用的drone版本也很老旧. 随后只能一步步看官方文档进行部署, 但是部署过程中发现官方文档也写得不明不白, 遇到了一堆坑. 最后解决问题, 特此记录下来, 供大家参考.

官方文档是使用docker的方式安装, 网上也有博文说使用docker-compose安装失败.

这里先做声明: 不管哪种方式其实都是可以的, 我会先使用docker的方式安装一遍, 最后再提供一个docker-compose文件给大家享用. (我本地是直接使用docker-compose运行的)

安装Gogs

这里不做说明, 看到这篇文章, 相信大家已经安装好Gogs了, 没有安装的可查找相关博文或看官方文档安装, 这个不难, 也没什么坑(如果使用docker安装, 填写MySQL地址使用外部可访问的网络地址, 建议docker服务设置别名).

安装启动drone

调试阶段建议启动设置detach=false, 这样可以查看日志输出

docker run \ --volume=/var/lib/drone:/data \ --env=DRONE_DEBUG=true\ --env=DRONE_LOGS_TRACE=true\ --env=DRONE_LOGS_DEBUG=true\ --env=DRONE_LOGS_PRETTY=true\ --env=DRONE_AGENTS_ENABLED=true \ --env=DRONE_GIT_ALWAYS_AUTH=true \ --env=DRONE_RPC_SECRET=bca6ae9c4bc3022eb59f19642167068b \ --env=DRONE_SERVER_HOST=192.168.0.201:10080 \ --env=DRONE_SERVER_PROTO=http \ --env=DRONE_GOGS_SERVER=http://192.168.0.201:3000 \ --env=DRONE_USER_CREATE=username:admin,admin:true \ --publish=10080:80 \ --publish=10443:443 \ --restart=always \ --detach=false \ --name=drone \ drone/drone:1

环境变量配置说明

DRONE_GOGS_SERVER : Gogs服务地址(建议填写宿主机地址+端口, 需要http://开头)DRONE_GIT_ALWAYS_AUTH: 是否每次都要验证DRONE_RPC_SECRET: Drone服务密匙(后面安装runner使用相同的秘钥)DRONE_SERVER_HOST: Drone服务地址,外部可访问的域名或IP地址(建议填写宿主机地址+端口, 不需要http://开头)DRONE_SERVER_PROTO: Drone提供服务的协议类型,可选为http或httpsDRONE_USER_CREATE: 设置Drone管理员账号(注意设置的是Gogs平台里的账号), Drone是直接使用Gogs账号登录的其他相关DEBUG参数建议开启 安装Drone-runner

drone-runner分几种, 每一种是不一样的, 但是可同时存在. Drone-runner drone-runner是执行pipeline的服务, 对应编写.drone.yml的type. 如果你只安装了drone-runner-ssh, 然后你type使用docker, 那是运行不了的 注意:这里很坑, 官方文档没有说明, 当时卡了我两天

kind: pipeline type: ssh # 必须安装运行的是 drone-runner-ssh, 如果是docker类型则需要安装运行drone/drone-runner-docker name: default

这里我会同时安装两种类型的runner(ssh和docker)

安装启动drone-runner-ssh docker run -d \ -e DRONE_RPC_PROTO=http \ -e DRONE_RPC_HOST=192.168.0.201:10080 \ -e DRONE_RPC_SECRET=bca6ae9c4bc3022eb59f19642167068b \ -e DRONE_DEBUG=true \ -p 10081:3000 \ --restart always \ --name ssh-runner \ drone/drone-runner-ssh

环境变量配置说明

DRONE_RPC_SECRET: Drone服务密匙(后面安装runner使用相同的秘钥)DRONE_RPC_HOST: Drone服务地址,外部可访问的域名或IP地址(建议填写宿主机地址+端口, 不需要http://开头)DRONE_RPC_PROTO: Drone提供服务的协议类型,可选为http或https 安装启动drone-runner-docker docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock \ -e DRONE_RPC_PROTO=http \ -e DRONE_RPC_HOST=192.168.0.201:10080 \ -e DRONE_RPC_SECRET=bca6ae9c4bc3022eb59f19642167068b \ -e DRONE_RUNNER_CAPACITY=2 \ -e DRONE_RUNNER_NAME=docker-runner \ -e DRONE_DEBUG=true \ -p 10082:3000 \ --restart always \ --name docker-runner \ drone/drone-runner-docker:1

到此, 如无意外, 服务基本安装成功了. 打开浏览器访问一下地址:

http://192.168.0.201:10080

出现一下登录界面: Drone登录 输入Gogs平台账号, 前面设置的admin账号或其他gogs里的账号也可以登录. 登录后你会发现Drone已同步了Gogs的项目 drone项目 选择一个项目, 点击右边的ACTIVATE activate 勾选Trusted, 注意, 如果你登录的不是管理员, 那么你看不到这个项目. 勾选Trusted是docker数据卷挂载需要此权限.

例如:

kind: pipeline type: docker name: default steps: - name: build image: golang volumes: - name: docker path: /var/run/docker.sock commands: - go build volumes: - name: docker host: path: /var/run/docker.sock

上图点击保存后, Drone会在Gogs对应项目设置Webhook 登录Gogs平台查看 Webhook 使用IDE在项目根目录新建文件.drone.yml 注意文件名: 前面有一个"."开头, 这里又一个坑, 坑了我半天 输入内容, 这里以go项目为例:

kind: pipeline type: docker # 使用docker name: default steps: - name: test image: golang commands: - echo Hello Drone !! - go build

ide 保存后commit&push项目文件, 同时刷新查看Drone平台项目状态 自动部署 自动部署 可以看到, 项目已自动部署成功.

测试ssh项目

新增并激活ssh项目(同上) 另外新增一个Secrets, Secrets用于保存一些敏感信息, 供.drone.yml使用.

kind: pipeline type: ssh # 使用SSH name: default server: host: 192.168.0.201 user: root password: from_secret: rootpass # Secrets保存的密码 steps: - name: build commands: - echo Hello Drone!! - df -h - pwd - ls -l - go version - go build

commit&push项目文件, 查看部署情况, 可以看到是ssh在远程服务器执行命令

ssh 部署

我们再试一下停止drone-runner-ssh

修改一下.drone.yml文件, 重新commit&push项目文件, 查看部署情况 异常 你会发现以上异常情况 (界面显示default: Pending), 无法部署完成. 这里卡了我两天, 之前我只安装了drone-runner-docker, 我以为docker是可以的, 那应该ssh也可以, 没想到是不行的. 后来查看日志才发现错误. 教训: 开启DEBUG日志, 遇到问题及时查看

以上只是一些简单例子, 详细的可自行编写

使用docker-compose一键启动服务 version: "3.8" services: gogs: image: gogs/gogs container_name: my-gogs restart: always networks: dronenet: aliases: - gogs volumes: - /data1/mygogs:/data ports: - "10022:22" - "3000:3000" drone: # 参考文档 https://docs.drone.io/server/provider/gogs/ image: drone/drone:1 container_name: my-drone restart: always ports: - 10080:80 - 10443:443 networks: dronenet: aliases: - drone volumes: - /var/run/docker.sock:/var/run/docker.sock - /data1/drone/:/var/lib/drone environment: - TZ=Asia/Shanghai - DRONE_DEBUG=true - DRONE_LOGS_TRACE=true - DRONE_LOGS_DEBUG=true - DRONE_LOGS_PRETTY=true - DRONE_GIT_ALWAYS_AUTH=false - DRONE_RPC_SECRET=bca6ae9c4bc3022eb59f19642167068b - DRONE_SERVER_HOST=192.168.0.201:10080 - DRONE_SERVER_PROTO=http - DRONE_GOGS_SERVER=http://192.168.0.201:3000 - DRONE_USER_CREATE=username:admin,admin:true drone-sshrunner: # docker类型的pipeline必须安装运行drone-runner-ssh # 参考文档 https://docs.drone.io/runner/ssh/overview/ image: drone/drone-runner-ssh container_name: my-drone-sshrunner restart: always ports: - 10081:3000 depends_on: - drone networks: dronenet: aliases: - drone-sshrunner volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - TZ=Asia/Shanghai - DRONE_DEBUG=true - DRONE_RPC_SECRET=bca6ae9c4bc3022eb59f19642167068b - DRONE_RPC_HOST=192.168.0.201:10080 - DRONE_RPC_PROTO=http - DRONE_RUNNER_CAPACITY=2 - DRONE_RUNNER_NAME=drone-sshrunner drone-runner: # docker类型的pipeline必须安装运行drone-runner-docker # 参考文档 https://docs.drone.io/runner/docker/overview/ image: drone/drone-runner-docker:1 container_name: my-drone-runner restart: always ports: - 10082:3000 depends_on: - drone networks: dronenet: aliases: - drone-runner volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - TZ=Asia/Shanghai - DRONE_DEBUG=true - DRONE_RPC_SECRET=bca6ae9c4bc3022eb59f19642167068b - DRONE_RPC_HOST=192.168.0.201:10080 - DRONE_RPC_PROTO=http - DRONE_RUNNER_CAPACITY=2 - DRONE_RUNNER_NAME=drone-runner networks: dronenet: external: true # 使用外部网络, 需先创建网络

运行服务

docker-compose up

运行单个服务

docker-compose up drone docker-compose up drone-runner docker-compose up drone-sshrunner

停止服务

docker-compose stop

停止单个服务

docker-compose stop drone docker-compose stop drone-runner docker-compose stop drone-sshrunner 感想

Drone 还是挺好用的, 搭建和上手速度都很快, 特别是熟悉docker的同学. 只是官方文档不够详细, 社区生态不是很好. 网上可参考的资料比较少. 可能中国用的人比较少.

写这篇文章: 希望可以帮助到需要的同学, 带动生态的发展

参考文档: Drone官方文档



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3